package com.example.service.impl;

import com.example.mapper.systemDocumentMapp;
import com.example.pojo.systemDocumentPojo;
import com.example.service.systemDocumentService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;

import java.io.File;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.time.LocalDateTime;
import java.util.List;
import java.util.Map;

/**
 * ClassName:systemDocumentImpl
 * Description:
 *
 * @Author 赵永峰
 * @Create 2024/7/27 23:08
 * @Version 1.0
 */
@Service
public class systemDocumentImpl implements systemDocumentService{
    @Autowired
    private systemDocumentMapp systemDocumentMapp;
    @Value("${file.upload-dir}")
    private String saveDir;
    //输入一个字段名称和字段变量，插入一行。这一行只保留了一个参数，其他为空。
    public void insertByOneFiledName(String filedName, String filedVal){
        //组合修改时间
        LocalDateTime dateTime=LocalDateTime.now();
        systemDocumentMapp.insertByOneFiledName(filedName,filedVal,dateTime);

    }
    //查询所有不同的体系文件名称
    public List<systemDocumentPojo> querySystemDocName(){
        List<systemDocumentPojo> systemDocumentPojoList=systemDocumentMapp.querySystemDocName();
        return systemDocumentPojoList;
    }
    //写入一个体系文件，并且修改体系文件地址
   public String addPDFSystemDocument(MultipartFile file, Integer id, String fieldName, String fieldVal, String fileName){
       try {
           if (!file.isEmpty()) {
               String filePath = saveDir + fileName;
               File dest = new File(filePath);
               // 将文件保存到服务器上的指定位置
               file.transferTo(dest);
               // 将新的作业指导书内容写入到数据库中
               LocalDateTime dateTime = LocalDateTime.now();
               //根据传来的内容，写入到数据库中
               systemDocumentMapp.editFieldOneById(id, fieldName, fieldVal, dateTime);
               return fieldVal;
           }
       }
       catch (IOException e) {
           // 捕获异常并返回错误消息
           throw new RuntimeException("文件保存失败：" + e.getMessage());
       }
       return fieldVal;
   }
    //根据传来的数据，进行修改一个字段，修改的字段为string类型。
    public String editFiledOneById(Map<String, Object> parameters){
        Integer id=(Integer) parameters.get("id");
        String fieldName=(String) parameters.get("fieldName");
        String fieldVal=(String) parameters.get("fieldVal");
        String fieldOldVal=(String) parameters.get("fieldOldVal");
        // 将新的作业指导书内容写入到数据库中
        LocalDateTime dateTime = LocalDateTime.now();
        //根据传来的内容，写入到数据库中
        systemDocumentMapp.editFieldOneById(id, fieldName, fieldVal, dateTime);
        return fieldVal;
    }
    //删除体系文件的PDF文档
    public String delFilePdfSystemDocument(Map<String, Object> parameters){
        //读取出数据
        Integer id=(Integer) parameters.get("id");
        String fieldName=(String) parameters.get("fieldName");
        String fieldVal=(String) parameters.get("fieldVal");
        String fileName=(String) parameters.get("fileName");
        //删除文件
        String filePath =saveDir+fileName; // 替换为文件路径
        // 使用 Paths 类的静态方法 get 来根据给定的文件路径字符串 filePath 创建一个 Path 对象
        Path path = Paths.get(filePath);
        try {
            //先把数据库的信息修改掉
            LocalDateTime dateTime = LocalDateTime.now();
            //修改数据库
            // 将数据写入到数据库中
            systemDocumentMapp.editFieldOneById(id, fieldName, fieldVal, dateTime);
            // 使用 Files 类的 delete 方法删除指定的文件
            Files.delete(path);
            return fieldVal;
        }
        catch (IOException e) {
            System.err.println("删除文件时出错: " + e.getMessage());
            return "删除文件时出错";
        }
    }
}
